package com.wn.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.util.List;

/**
 * @author yellow Docter
 * @date 2022 -10-24
 * @desc
 *
 *  spring项目中有RestTemplate 这个对象，可以发送http的请求
 *  使用步骤：
 *   1、把RestTemplate 注册到ioc容器中
 *   2、调用RestTemplate 提供的方法
 *
 */
@RestController
@RequestMapping("portal")
@Slf4j
public class PortalController {

    @Autowired
    private RestTemplate restTemplate;

//    public static final String URL = "http://localhost:9000/member/";

    //使用微服务的名称
    public static final String URL = "http://CINEMA-MEMBER-SERVICE/member/";

    @RequestMapping("/{mid}")
    public String findMemberById(@PathVariable("mid")Integer mid){
        //调用 member-service 这个服务器

        //前端 你调用  服务端时候 :  http请求  (ajax/axios)
        //代端可以发送: http请求？ 可以使用httpClient 发送一个请求可以获取其他服务的提供的信息
        // RestTemplate  内部封装了 http请求 可以发送请求

        String url = URL + "/" + mid;
        /**
         * restTemplate 远程调用的中间件
         * 1、getForObject 发送get请求的方法
         * 2、url 请求的远程服务的url
         * 3、responseType 远程调用返回的类型
         */
        String result = restTemplate.getForObject(url, String.class);
        return "success:" + result;
    }

    /**
     *  服务发现的客户端
     *  可以去 eureka 客户中心获取 服务列表
     *  DiscoveryClient: springboot 自动装配,初始化了 添加到ioc容器中
     */
    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("/test1/{mid}")
    public String findMemberById2(@PathVariable("mid")Integer mid){

        // 获取服务列表
        List<ServiceInstance> instances = discoveryClient.getInstances("CINEMA-MEMBER-SERVICE");

        //拿到第一个服务
        ServiceInstance serviceInstance = instances.get(0);
        //ip
        String host = serviceInstance.getHost();
        // 端口
        int port = serviceInstance.getPort();

        String url = "http://"+host+":"+port+"/member/" + mid;
        String result = restTemplate.getForObject(url, String.class);

        return result;
    }
}
